CSE 444 Midterm
Autumn 1999
Name___________________________________
Please define the following terms in a three sentences or less:
Asserts that exactly one value exists in the role specified
A query that contains a subquery where the subquery refers to tuple variables or attributes of the outer relation.
[20 points] Decompose R(A,B,C,D,E) with functional dependencies Aà B, Bà C, Cà D into BCNF. Justify your answer, show your work, and please circle the final relations in your decomposition
A+= ABCD
B+= BCD
C+= CD
D+= D
E+= E
AB+= ABCD
AC+= ABCD
AD+= ABCD
AE+= ABCDE KEY
BC+= BCD
BD+= BCD
BE+= BCDE
CD+= CD
CE+= CDE
DE+= DE
ABC+= ABCDE
ABD+= ABCD
ABE+= ABCDE
ACD+= ABCD
ACE+= ABCDE
ADE+= ABCDE
BCD+= BCD
BCE+= BCDE
BDE+= BCDE
CDE+= CDE
ABCD+= ABCD
ABCE+= ABCDE
ACDE+= ABCDE
BCDE+= BCDE
Now we choose a functional dependency to split on.
I chose Aà B:
R1(A,B), R2(A,C,D,E)
R2 is not in BCNF, split on Cà D
R3(A,C,E), R4(C,D); R4 is in BCNF
R3 is not in BCNF; split on Aà C
R5(A,C), R6(A,E)
So our final decomposition is R1(A,B), R4(C,D), R5(A,C), R6(A,E)
Given the following schema for a library, give queries for the questions below. Note that the last question asks for a query in relational algebra.
Book(ISBN, author, title, subject)
Borrowed(book_ISBN, borrowers_card_number, due_date)
Library_Patron(card_number, first_name, last_name, phone_number)
Book_Request(book_ISBN, requesters_card_number)
Select b.phone_number, r.phone_number
From Library_Patron as b, Library_Patron as r, Book_Request as br, Borrowed as bo
Where b.card_number = borrowers_card_number and
r.card_number = requesters_card_number and
bo.book_ISBN = br.book_ISBN
Select count(*)
From Borrowed, Book
Where Borrowed.book_ISBN = Book.ISBN
And Book.title = ‘A First Course in Database Systems’
Select count(book_ISBN), author
From Borrowed, Book, Library_Patron
Where Borrowed.book_ISBN = Book.ISBN
And Library_Patron.first_name = ‘Alon’
And Library_Patron.last_name = ‘Levy’
And Borrowed.borrowers_card_number = Library_Patron.card_number
Group by author
Select card_number count(book_ISBN)
From Library_patron, Borrowed, Book
Where card_number = borrowers_card_number and
author > last_name and book_ISBN = ISBN and
book_ISBN not in (
Select book_ISBN
From Borrowed as borrower1, Borrowed as borrower2, book
Where book_ISBN = ISBN and
Borrower1.borrowers_card_number <> borrower2.borrowers_card_number)
Group by card_number
P title (Book |><| ISBN = book_ISBN(Borrowed |><| borrowers_card_number = card_number(s last_name = ‘Pottinger’ Library_Patron))